package br.com.sms.action;

import br.com.sms.dominio.Usuario;
import br.com.sms.enuns.Situacao;
import br.com.sms.excecao.SmsException;
import br.com.sms.util.MensagensErro;

import com.opensymphony.xwork2.ActionContext;

public class LoginAction extends Action{

	private String login;
	private String senha;
	private Usuario usuario;
	private String novaSenha;
	private String reNovaSenha;

	/**
	 * : Efetua o login no sistema.
	 * @return
	 */
	public String logar(){

		try{
			getUsuarioFacade().validarCamposLogin(login, senha);
			senha = getUsuarioFacade().criptografaSenha(senha);
			usuario = getUsuarioFacade().recuperarUsuario(login);
			if(usuario != null){
				if(usuario.getSenha().equals(senha)){
					if(usuario.getCliente().getSituacao().equals(Situacao.INATIVO)){
						erros.put("erro", MensagensErro.CLIENTE_INATIVO.replace("?", usuario.getCliente().getNome()));
						apresentarErros();
						return TELA_LOGIN;
					}
					if(usuario.getSituacao().equals(Situacao.INATIVO)){
						erros.put("erro", MensagensErro.USUARIO_INATIVO.replace("?", usuario.getLogin()));
						apresentarErros();
						return TELA_LOGIN;
					}
					ActionContext.getContext().getSession().put(USUARIO_LOGADO, usuario);
					return TELA_INICIAL;
				}else{
					erros.put("erro", MensagensErro.SENHA_INVALIDA);
					apresentarErros();
					return TELA_LOGIN;
				}
			}else{
				erros.put("erro", MensagensErro.USUARIO_NAO_CADASTRADO);
				apresentarErros();
				return TELA_LOGIN;
			}
		}catch(SmsException ex) {
			erros.put("erro", ex.getMessage());
			apresentarErros();
			return TELA_LOGIN;
		}
	}

	public String telaMenuAdm(){
		return TELA_INICIAL;
	}

	/**
	 * : Retira o usuário logado da sessão.
	 * @return
	 */
	public String deslogar(){
		ActionContext.getContext().getSession().remove(USUARIO_LOGADO);
		return TELA_LOGIN;
	}


	//	public String alterarSenha(){
	//		
	//		try{
	//			if(getUsuario().getSenha().equals(getUsuarioFacade().criptografaSenha(senha))){
	//				if(novaSenha.equals(reNovaSenha)){
	//					getUsuario().setSenha(novaSenha);
	//					
	//					loginFacade.verificaPreenchimento(usr);
	//					usuarioFacade.salvarUsuario(usr);
	//					
	//					auditoriaFacade.gravaAuditoria(AuditoriaUtil.montaAuditoria(Funcionalidade.LOGIN, Acao.ALTERACAO, getUsuarioLogado()));
	//					mensagens.put("salvo", "Senha Alterada com Sucesso!");
	//					apresentaMensagens();
	//					return SUCESSO_ALTERACAO_SENHA;
	//				}else{
	//					erros.put("campoInvalido", "Campo\"Nova Senha\" diferente de\" Redigite a Nova Senha\"");
	//				}
	//			}else{
	//				erros.put("campoInvalido", "Senha inválida!");
	//			}
	//
	//		}catch(CampoInvalidoException ex) {
	//			erros.put("campoInvalido", ex.getMessage());
	//			
	//		}
	//		apresentaErrors();
	//		return FALHA_ALTERACAO_SENHA;
	//	}

	/*Get & Set*/
	public String getAcesso() {
		return login;
	}
	public void setAcesso(String acesso) {
		this.login = acesso;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getNovaSenha() {
		return novaSenha;
	}

	public void setNovaSenha(String novaSenha) {
		this.novaSenha = novaSenha;
	}

	public String getReNovaSenha() {
		return reNovaSenha;
	}

	public void setReNovaSenha(String reNovaSenha) {
		this.reNovaSenha = reNovaSenha;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public Usuario getUsuarioLogado() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

}
